package com.builder.main;

import com.builder.Person;
import com.builder.PersonDirector;
import com.builder.impl.ManBuilder;

/**
 * 建造者模式：将一个复杂对象的构造与它的表示分离，使同样的构建过程可以创建不同的表示，这样的设计模式被称为。
 * 
 * 以下情况应当使用建造者模式：
 * 
 * 1、 需要生成的产品对象有复杂的内部结构。 2、 需要生成的产品对象的属性相互依赖，建造者模式可以强迫生成顺序。 3、
 * 在对象创建过程中会使用到系统中的一些其它对象，这些对象在产品对象的创建过程中不易得到。
 * 
 * 使用建造者模式主要有以下效果：
 * 
 * 1、 建造模式的使用使得产品的内部表象可以独立的变化。使用建造者模式可以使客户端不必知道产品内部组成的细节。 2、
 * 每一个Builder都相对独立，而与其它的Builder无关。 3、 模式所建造的最终产品更易于控制。
 */
public class Test {

	public static void main(String[] args) {
		PersonDirector pd = new PersonDirector();
		Person person = pd.constructPerson(new ManBuilder());
		System.out.println(person.getBody());
		System.out.println(person.getFoot());
		System.out.println(person.getHead());
	}

}
